
/*
当创建过程宏时，它的定义必须要放入一个[独立的包]中，且包的类型也是特殊的，这么做的原因相当复杂，大家只要知道这种限制在未来可能会有所改变即可。
事实上，根据这个说法，过程宏放入独立包的原因在于它必须先被编译后才能使用，
如果过程宏和使用它的代码在一个包，就必须先单独对过程宏的代码进行编译，然后再对我们的代码进行编译，但悲剧的是 Rust 的编译单元是包，因此你无法做到这一点。
*/

use hello_macro::HelloMacro;
use hello_macro_derive::HelloMacro;

#[derive(HelloMacro)]
struct Sunfei;

// impl HelloMacro for Sunfei {
//     fn hello_macro() {
//         println!("Hello, Macro! My name is Sunfei!");
//     }
// }

#[derive(HelloMacro)]
struct Sunface;

// impl HelloMacro for Sunface {
//     fn hello_macro() {
//         println!("Hello, Macro! My name is Sunface!");
//     }
// }

fn main() {
    Sunfei::hello_macro();
    Sunface::hello_macro();
}